package co.inventario.datos.sqlserver;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.entidad.ConceptoKardexDTO;
import co.inventario.entidad.MovimientoKardexDTO;

public class ConceptoKardexDAOSQLServer {

	private String crearSQL;
	private String actualizarSQL;
	private String consultarSQL;

	public ConceptoKardexDAOSQLServer() {
		crearSQL = "";
		actualizarSQL = "";
		consultarSQL = "";
	}

	public void crear(ConceptoKardexDTO conceptoKardexDTO, Connection connection) throws SQLException {
		crearSQL = "INSERT INTO ConceptoKardex (Nv_Nombre_Concepto, In_Codigo_Movimiento) VALUES (?, ?)";
		try (PreparedStatement preparedStatement = connection.prepareStatement(crearSQL)) {
			preparedStatement.setString(1, conceptoKardexDTO.getNvNombreConcepto());
			preparedStatement.setInt(2, conceptoKardexDTO.getMovimientoKardexDTO().getInCodigoMovimiento());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema creando el Concepto kardex: " + exception.getMessage());
		}
	}

	public void actualizar(ConceptoKardexDTO conceptoKardexDTO, Connection connection) throws SQLException {
		actualizarSQL = "UPDATE ConceptoKardex SET Nv_Nombre_Concepto = ISNULL(?, Nv_Nombre_Concepto), In_Codigo_Movimiento = ISNULL(?, In_Codigo_Movimiento) WHERE In_Codigo_Concepto = ?";
		try (PreparedStatement preparedStatement = connection.prepareStatement(actualizarSQL)) {
			preparedStatement.setString(1, conceptoKardexDTO.getNvNombreConcepto());
			preparedStatement.setInt(2, conceptoKardexDTO.getMovimientoKardexDTO().getInCodigoMovimiento());
			preparedStatement.setInt(3, conceptoKardexDTO.getInCodigoConcepto());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema actualizando el Concepto kardex: " + exception.getMessage());
		}
	}

	public ConceptoKardexDTO consultarPorCodigo(ConceptoKardexDTO conceptoKardexDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM ConceptoKardex WHERE In_Codigo_Concepto = ?";
		ConceptoKardexDTO conceptoKardexDTOResultado = null;
		MovimientoKardexDTO movimientoKardexDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, conceptoKardexDTO.getInCodigoConcepto());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				if (resultSet.next() == true) {
					conceptoKardexDTOResultado = new ConceptoKardexDTO();
					conceptoKardexDTOResultado.setInCodigoConcepto(resultSet.getInt("In_Codigo_Concepto"));
					conceptoKardexDTOResultado.setNvNombreConcepto(resultSet.getString("Nv_Nombre_Concepto"));
					movimientoKardexDTO = new MovimientoKardexDTO();
					movimientoKardexDTO.setInCodigoMovimiento(resultSet.getInt("In_Codigo_Movimiento"));
					conceptoKardexDTOResultado.setMovimientoKardexDTO(movimientoKardexDTO);
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el Concepto kardex a traves del codigo: " + exception.getMessage());
		}
		return conceptoKardexDTOResultado;
	}

	public ConceptoKardexDTO consultarPorNombre(ConceptoKardexDTO conceptoKardexDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM ConceptoKardex WHERE Nv_Nombre_Concepto = ?";
		ConceptoKardexDTO conceptoKardexDTOResultado = null;
		MovimientoKardexDTO movimientoKardexDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setString(1, conceptoKardexDTO.getNvNombreConcepto());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				while (resultSet.next() == true) {
					conceptoKardexDTOResultado = new ConceptoKardexDTO();
					conceptoKardexDTOResultado.setInCodigoConcepto(resultSet.getInt("In_Codigo_Concepto"));
					conceptoKardexDTOResultado.setNvNombreConcepto(resultSet.getString("Nv_Nombre_Concepto"));
					movimientoKardexDTO = new MovimientoKardexDTO();
					movimientoKardexDTO.setInCodigoMovimiento(resultSet.getInt("In_Codigo_Movimiento"));
					conceptoKardexDTOResultado.setMovimientoKardexDTO(movimientoKardexDTO);
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el Concepto kardex a traves del nombre: " + exception.getMessage());
		}
		return conceptoKardexDTOResultado;
	}

	public ArrayList<ConceptoKardexDTO> consultarTodo(Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM ConceptoKardex";
		ConceptoKardexDTO conceptoKardexDTOResultado = null;
		ArrayList<ConceptoKardexDTO> conceptoKardexDTOLista = new ArrayList<ConceptoKardexDTO>();
		MovimientoKardexDTO movimientoKardexDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				while (resultSet.next() == true) {
					conceptoKardexDTOResultado = new ConceptoKardexDTO();
					conceptoKardexDTOResultado.setInCodigoConcepto(resultSet.getInt("In_Codigo_Concepto"));
					conceptoKardexDTOResultado.setNvNombreConcepto(resultSet.getString("Nv_Nombre_Concepto"));
					movimientoKardexDTO = new MovimientoKardexDTO();
					movimientoKardexDTO.setInCodigoMovimiento(resultSet.getInt("In_Codigo_Movimiento"));
					conceptoKardexDTOResultado.setMovimientoKardexDTO(movimientoKardexDTO);
					conceptoKardexDTOLista.add(conceptoKardexDTOResultado);
				}
			}
		}
		return conceptoKardexDTOLista;
	}
}
